#pragma once

#include <cstdint>
#include <memory>
#include <models/PrimitiveDataManager.h>
#include <string>

class Variable
{
public:
    Variable(const std::string&, const std::string&);
    ~Variable() = default;

    const std::string& get_sn();
    const std::string& get_name();

    void set_data_section(const std::string&);
    const std::string& get_data_section();
    void set_address(const std::string&);
    const std::string& get_address();
    void set_pos(uint16_t);
    uint16_t get_pos();
    void set_type(const std::string&);
    const std::string& get_type();
    void set_data_type(const std::string&);
    const std::string& get_data_type();
    void set_coefficient(const std::string&);
    const std::string& get_coefficient();
    void set_initial_value(const std::string&);
    const std::string& get_initial_value();
    void set_offset_value(const std::string&);
    const std::string& get_offset_value();
    void set_reserved(const std::string&);
    const std::string& get_reserved();



    std::shared_ptr<PrimitiveData> get_memory_value();
    std::shared_ptr<PrimitiveData> get_transfer_value();

private:
    std::string sn;
    std::string name;
    std::string data_section;
    std::string address;
    uint16_t pos;
    std::string type;
    std::string data_type;
    std::string coefficient;
    std::string initial_value;
    std::string offset_value;
    std::string reserved;
    std::shared_ptr<PrimitiveData> memory_value;
    std::shared_ptr<PrimitiveData> transfer_value;
};